挑戰賽終於來到第十四天了。好像開始感受到腦袋不知道要寫些什麼的感覺了XD
這次來談談middleware,當初在學Laravel的時候其實花了好多時間去搞他到底想要完成什麼。
太深的理論概念我說不出來,但我可以用我理解過的方式分享給大家。
我們自己網路體驗中都知道當我們登入過後,可以訪問個人頁面。
如果在還沒登入的狀況下,我們就去訪問那個網址,通常都會導向到登入頁面或者註冊頁面之類的。
這就是一個很好解釋middleware的例子。
我們必須完成什麼條件,才能夠夠訪問某個API。
當然我們也可以是多層的就像洋蔥一樣,要一層一層剝開最後才能去訪問該API
有興趣的大家可以在搜尋 middleware 洋蔥圈,但我覺得沒很好理解就是了XD
回來剛剛這句話
我們必須完成什麼條件,才能夠夠訪問某個API。
也就是說,我們需要自己定義條件。
等等的例子我只會單純印出東西之後才能訪問該API
而那個印出東西的位置,就是未來你必須完成的商業邏輯的部份
上圖
midTest 也可以寫成這樣
function midTest(req, res, next){
console.log('mid中介在這裡');
next();
}
這只是題外話XD
OK經過上述很簡單的解釋,應該都能知道出現結果的順序是什麼了~
不知道沒關係,我印給你看,假設我去打test
這樣有感受到了嗎? 當我去打某一隻API之前,他會需要去看我middleware裡面做了什麼事情。
換句話說,我就能達到,我如果在未登入的狀態去打個人檔案的API,如果對方有寫好程式,那麼就很大機率會被你導向出來,或者提示你無權反問之類的。
那上述這個寫法,是針對這邊所有router都需要經過midTest的驗證。
我們再試試看另一隻/user的API吧~~
上圖
那麼如果我有兩層mid要驗證呢~?
這樣做就可以了
那麼可能不能API的需要的是不同的mid驗證呢?
在上圖~
這樣就可以了。
最後一個提供官網文件的寫法,我就懶得測試了。
這樣意思就是說我要打/example/c 這隻route
前面會經過 cb0 透過next() 進入到 cb1 next() 進入到主要程式邏輯
cb0 跟 cb1 都是mid哦。 cb2 則是商業邏輯了
之前Laravel把很多東西都包好了,很方便使用,使用起來沒那麼好體會這個流程。
在node.js上這方面驗證感覺很多都是要自己寫的,所以更有感覺了一點~
希望透過簡單的例子可以幫助你有初步的概念囉~
也另外提供
官網
這邊感覺有不少好用的套件,但我是還沒研究XD